package com.dimples.dd.system.service;

import cn.hutool.core.lang.tree.Tree;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dimples.dd.common.pojo.PageResult;
import com.dimples.dd.system.model.entity.SystemMenuDO;
import com.dimples.dd.system.model.form.MenuForm;
import com.dimples.dd.system.model.query.MenuPageQuery;
import com.dimples.dd.system.model.vo.MenuTreeVO;
import com.dimples.dd.system.model.vo.RouteVO;

import java.util.List;

public interface SystemMenuService extends IService<SystemMenuDO> {

    /**
     * 根据用户名获取权限集合
     *
     * @param username 用户名
     * @return {@link SystemMenuDO}
     */
    List<SystemMenuDO> findUserPermissions(String username);

    /**
     * 获取路由列表
     *
     * @return {@link RouteVO}
     */
    RouteVO listRoutes();

    /**
     * 路由是否存在
     *
     * @param routeName {@link String}
     * @return {@link Boolean}
     */
    Boolean existRoute(String routeName);

    /**
     * 获取菜单树
     *
     * @param menuPageQuery 菜单查询对象
     * @return {@link List<MenuTreeVO>}
     */
    List<MenuTreeVO> menuTree(MenuPageQuery menuPageQuery);

    /**
     * 获取简易菜单树
     *
     * @return {@link List<Tree<Long>>}
     */
    List<Tree<Long>> simpleMenuTree();


    /**
     * 获取所有路由页面
     *
     * @return 路由名称集合
     */
    List<String> menuPagesAll();

    /**
     * 创建菜单
     *
     * @param menuForm 菜单信息
     * @return 创建出来的菜单编号
     */
    Long createMenu(MenuForm menuForm);

    /**
     * 更新菜单
     *
     * @param id       菜单编号
     * @param menuForm 菜单信息
     */
    void updateMenu(Long id, MenuForm menuForm);

    /**
     * 删除菜单
     *
     * @param id 菜单编号
     */
    void deleteMenu(Long id);

    /**
     * 获取菜单分页列表
     *
     * @param menuPageQuery 菜单查询对象
     * @return {@link PageResult<SystemMenuDO>}
     */
    PageResult<SystemMenuDO> selectPage(MenuPageQuery menuPageQuery);
}
